package top.roadvast.springboot.design_pattern.singleton;

/**
 * @Author 郭泽鹏
 * @Date 2021/10/19 16:07
 * @Version 1.0
 * @Description
 * 双重检查【推荐使用】
 * Double-Check概念对于多线程开发者来说不会陌生，如代码中所示，我们进行了两次if (singleton == null)检查，
 * 这样就可以保证线程安全了。这样，实例化代码只用执行一次，后面再次访问时，判断if (singleton == null)，
 * 直接return实例化对象。
 * 优点：线程安全；延迟加载；效率较高。
 */
public class Singleton06 {
    private static Singleton06 instance;

    /**
     * 不允许外部类访问
     */
    private Singleton06() {
    }

    /**
     * 双重检查（推荐使用）
     * @return
     */
    public Singleton06 getInstance() {
        if (instance == null) {
            synchronized (Singleton06.class) {
                if (instance == null) {
                    instance = new Singleton06();
                }
            }
        }
        return instance;
    }
}
